1
/****************************** Module Header ******************************\
2 * Module Name: Client.cs
3 * Project: CSASPNETReverseAJAX
4 * Copyright (c) Microsoft Corporation
6 * Client class is used to synchronize the message sending and the message receiving.
7 * When DequeueMessage method is called, the method will wait until a new message
8 * is inserted by calling EnqueueMessage method. This class benefits ManualResetEvent
9 * class to achieve the synchronism.
11 * This source is subject to the Microsoft Public License.
12 * See http://www.microsoft.com/opensource/licenses.mspx#Ms-PL.
13 * All other rights reserved.
15 \*****************************************************************************/
17 using System
.Collections
.Generic
;
18 using System
.Threading
;
20 namespace CSASPNETReverseAJAX
23 /// This class represents a web client which can receive messages.
27 private ManualResetEvent messageEvent
= new ManualResetEvent(false);
28 private Queue
<Message
> messageQueue
= new Queue
<Message
>();
31 /// This method is called by a sender to send a message to this client.
33 /// <param name="message">the new message</param>
34 public void EnqueueMessage(Message message
)
38 messageQueue
.Enqueue(message
);
40 // Set a new message event.
46 /// This method is called by the client to receive messages from the message queue.
47 /// If no message, it will wait until a new message is inserted.
49 /// <returns>the unread message</returns>
50 public Message
DequeueMessage()
52 // Wait until a new message.
53 messageEvent
.WaitOne();
57 if (messageQueue
.Count
== 1)
61 return messageQueue
.Dequeue();